package com.hyxt.utils;

import com.tangosol.net.CacheFactory;
import com.tangosol.net.MemberEvent;
import com.tangosol.net.MemberListener;
import com.tangosol.net.NamedCache;

/**
 * Coherence监听重启类(代理服务器关闭后监听器失效)
 * @author zhangcx
 * @version v1.0
 * @Description
 * @Date: Create in 15:15 2017/11/23
 * @Modifide By:
 **/
public class CoherenceReconnector implements Runnable, MemberListener {
    // 缓存名
    private String name;
    // 缓存检测间隔时间
    private long intv;

    /**
     * 传递监听器名字
     *
     * @param name
     *            ： cache name
     * @param intv
     *            : 检测间隔时间
     */
    public CoherenceReconnector(String name, long intv) {
        this.name = name;
        this.intv = intv;
    }

    /**
     * 开始重新连接，每隔N秒开始重新连接
     */
    @Override
    public void run() {
        //logger.info("开始重新连接缓存" + name);
        NamedCache cache = CacheFactory.getCache(name);
        do {
            try {
                cache.get(""); // 尝试重新连接
            } catch (com.tangosol.net.messaging.ConnectionException e) {
                //logger.warn(name + "重新连接失败，" + e.getMessage(), e);
            }
            try {
                Thread.sleep(intv);
            } catch (InterruptedException e) {
                //logger.error(name + "重新连接失败，" + e.getMessage(), e);
                e.printStackTrace();
                break;
            }
        } while (!cache.isActive());
       // logger.info("重新连接缓存结束" + name);
    }

    /**
     * 重新连接到远程服务器
     *
     * @param arg0
     */
    @Override
    public void memberJoined(MemberEvent arg0) {
       // logger.info("重新连接到代理服务器上");
    }

    /**
     * 代理服务器连接断开
     *
     * @param arg0
     */
    @Override
    public void memberLeaving(MemberEvent arg0) {
        //logger.info("Coherence代理服务器即将断开");
    }

    /**
     * 代理服务器连接已断开
     *
     * @param arg0
     */
    @Override
    public void memberLeft(MemberEvent arg0) {
       // logger.info("Coherence代理服务连接已断开，开始重新连接");
        Thread reconntor = new Thread(this);
        reconntor.start();
    }
}
